<!DOCTYPE html>
<html lang="en">
    <head>
	<meta name="generator" content="Hugo 0.75.1" />
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="format-detection" content="telephone=no" />

  <title>
    迪克猪的博客
  </title>

  
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
  <link rel="manifest" href="/manifest.json" />
  <meta name="theme-color" content="#ffffff" />

  
  <link
    rel="stylesheet"
    href="https://unpkg.com/modern-normalize@0.6.0/modern-normalize.css"
  />

  
  
  
  
  <link rel="stylesheet" href="https://zsy619.github.io/style.min.f7761d111b74dd5c07f0111decee92938c12abc42e0fd319e1a07483e248b54e.css" integrity="sha256-93YdERt03VwH8BEd7O6Sk4wSq8QuD9MZ4aB0g&#43;JItU4=" />

  
    <link rel="alternate" type="application/rss+xml" href="https://zsy619.github.io/index.xml" title="迪克猪的博客" />
  
  
    
  
</head>

    <body>
        <header id="header">
  <div class="header_container">
    <h1 class="sitetitle">
      <a href="https://zsy619.github.io" title="迪克猪的博客">迪克猪的博客</a>
    </h1>
    <nav class="navbar">
      <ul>
        <li><a href="https://zsy619.github.io">Home</a></li>
        
          <li>
            <a href="/post/">
              
              <span>LINUX性能优化</span>
            </a>
          </li>
        
          <li>
            <a href="/csapp/">
              
              <span>深入理解计算机系统_第三版</span>
            </a>
          </li>
        
          <li>
            <a href="/golang/">
              
              <span>golang</span>
            </a>
          </li>
        
          <li>
            <a href="/docker/">
              
              <span>容器</span>
            </a>
          </li>
        
          <li>
            <a href="/flutter/">
              
              <span>Flutter</span>
            </a>
          </li>
        
          <li>
            <a href="/know/">
              
              <span>知识点</span>
            </a>
          </li>
        
          <li>
            <a href="/categories/">
              
              <span>目录</span>
            </a>
          </li>
        
          <li>
            <a href="/about/">
              
              <span>关于</span>
            </a>
          </li>
        
        <li class="hide-sm"><a href="https://zsy619.github.io/index.xml" type="application/rss+xml">RSS</a></li>
      </ul>
    </nav>
  </div>
</header>

        
<section id="main" class="index">
  <div class="post_list container">
    
    
    <article class="post content">
      <time datetime="2020-06-02T12:18:53&#43;0800" class="date">Tue, Jun 2, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/13%E7%AD%94%E7%96%91%E4%B8%80%E6%97%A0%E6%B3%95%E6%A8%A1%E6%8B%9F%E5%87%BAres%E4%B8%AD%E6%96%AD%E7%9A%84%E9%97%AE%E9%A2%98%E6%80%8E%E4%B9%88%E5%8A%9E/" title="13|答疑（一）无法模拟出RES中断的问题，怎么办？">13|答疑（一）无法模拟出RES中断的问题，怎么办？</a>
      </h3>
      <div class="post_content summary">
        问题 1：性能工具版本太低，导致指标不全 性能分析的学习，建议要用最新的性能工具来学。新工具有更全面的指标，更容易上手分析。这个绝对的优势，可以让你更直观地得到想要的数据，也不容易让你打退堂鼓。
最好试着去理解性能工具的原理，或者熟悉了使用方法后，再回过头重新学习原理。这样，即使是在无法安装新工具的环境中，你仍然可以从 proc 文件系统或者其他地方，获得同样的指标，进行有效的分析。
问题 2：使用 stress 命令，无法模拟 iowait 高的场景 可以运行下面的命令，来模拟 iowait 的问题：
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-01T19:24:51&#43;0800" class="date">Mon, Jun 1, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/12%E5%A5%97%E8%B7%AF%E7%AF%87cpu-%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%9A%84%E5%87%A0%E4%B8%AA%E6%80%9D%E8%B7%AF/" title="12|套路篇--CPU性能优化的几个思路">12|套路篇--CPU性能优化的几个思路</a>
      </h3>
      <div class="post_content summary">
        性能优化方法论 三个问题：
 首先，既然要做性能优化，那要怎么判断它是不是有效呢？特别是优化后，到底能提升多少性能呢？ 第二，性能问题通常不是独立的，如果有多个性能问题同时发生，你应该先优化哪一个呢？ 第三，提升性能的方法并不是唯一的，当有多种方法可以选择时，你会选用哪一种呢？是不是总选那个最大程度提升性能的方法就行了呢？  性能评估可能有多重指标，性能问题可能会多个同时发生，而且，优化某一个指标的性能，可能又导致其他指标性能的下降。
怎么评估性能优化的效果 性能评估“三步走”：
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-01T18:49:15&#43;0800" class="date">Mon, Jun 1, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/11%E5%A5%97%E8%B7%AF%E7%AF%87%E5%A6%82%E4%BD%95%E8%BF%85%E9%80%9F%E5%88%86%E6%9E%90%E5%87%BA%E7%B3%BB%E7%BB%9Fcpu%E7%9A%84%E7%93%B6%E9%A2%88%E5%9C%A8%E5%93%AA%E9%87%8C/" title="11|套路篇--如何迅速分析出系统CPU的瓶颈在哪里？">11|套路篇--如何迅速分析出系统CPU的瓶颈在哪里？</a>
      </h3>
      <div class="post_content summary">
        cup性能指标 首先联想到cpu使用率 根据cpu上运行任务不同，划分：
 用户cpu  用户 CPU 使用率，包括用户态 CPU 使用率（user）和低优先级用户态 CPU 使用率（nice），表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高，通常说明有应用程序比较繁忙。   系统cpu  系统 CPU 使用率，表示 CPU 在内核态运行的时间百分比（不包括中断）。系统 CPU 使用率高，说明内核比较繁忙。   等待io/cpu  等待 I/O 的 CPU 使用率，通常也称为 iowait，表示等待 I/O 的时间百分比。iowait 高，通常说明系统与硬件设备的 I/O 交互时间比较长。   软中断 硬中断  软中断和硬中断的 CPU 使用率，分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高，通常说明系统发生了大量的中断。    除了上面这些，还有在虚拟化环境中会用到的窃取 CPU 使用率（steal）和客户 CPU 使用率（guest），分别表示被其他虚拟机占用的 CPU 时间百分比，和运行客户虚拟机的 CPU 时间百分比。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-01T11:49:03&#43;0800" class="date">Mon, Jun 1, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/10%E6%A1%88%E4%BE%8B%E7%AF%87%E7%B3%BB%E7%BB%9F%E7%9A%84%E8%BD%AF%E4%B8%AD%E6%96%ADcpu%E4%BD%BF%E7%94%A8%E7%8E%87%E5%8D%87%E9%AB%98%E6%88%91%E8%AF%A5%E6%80%8E%E4%B9%88%E5%8A%9E/" title="10|案例篇--系统的软中断CPU使用率升高，我该怎么办？">10|案例篇--系统的软中断CPU使用率升高，我该怎么办？</a>
      </h3>
      <div class="post_content summary">
        中断处理程序  分上半部与下半部 上半部对应硬件中断，用来快速处理中断 下半部对应软件中断，用异步处理上半部未完成的工作 观察中断可通过/proc/softirqs  sar命令 查看系统网络收发情况
# -n DEV 表示显示网络收发的报告，间隔1秒输出一组数据 $ sar -n DEV 1 15:03:46 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 15:03:47 eth0 12607.
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-01T10:26:55&#43;0800" class="date">Mon, Jun 1, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/%E7%AC%AC%E4%B8%80%E5%91%A801-09%E9%98%B6%E6%AE%B5%E5%B0%8F%E7%BB%93/" title="第一周01-09阶段小结">第一周01-09阶段小结</a>
      </h3>
      <div class="post_content summary">
        学习思路 建立起整体性能的全局观
学习内容  平均负载  含义 1分钟、5分钟、15分钟时间段监控 平均负载的合理性判定 工具uptime使用 /proc/cupinfo查看cup相关信息 工具top使用 平均负载高于cpu数量70%就要进行排查了 工具uptime、stress、systat、mpstat、pidstat使用   cpu上下文切换  cpu寄存器 程序计数器PC cpu上下文与cpu上下文切换 进程上下文切换、进程上下文切换、中断上下文切换  内核空间 &ndash; 内核态 用户空间 &ndash; 用户态 工具vmstat、pidstat、sysbench、man、watch使用   自愿上下文切换 非自愿上下文切换   中断  进行中断会出现什么情况 /proc/interrupts观察中断情况   cpu使用率  节拍率HZ，使用/boot/config查看配置情况 USER_HZ，默认100 /proc/stat与/proc/[pid]/stat查看cpu使用率 工具top、ps、pidstat、perf top、perf recod、perf report、ab、pstree、execsnoop、ftrace使用   僵尸进程  进程状态区分（R\D\Z\S\I） 进程组、会话 iowait分析 工具ps aux、top、dstat、pidstat、strace、perf record、perf report、pstree使用   软中断  异步处理机制 上半部与下半部 外卖配送例子 /proc/softirqs /proc/interrupts    学习感悟 要从了解基本概念，从系统的原理着手出发，linux下的工具比较齐全，要充分了解各工具的作用及应用场景
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-05-31T17:32:53&#43;0800" class="date">Sun, May 31, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/09%E5%9F%BA%E7%A1%80%E7%AF%87%E6%80%8E%E4%B9%88%E7%90%86%E8%A7%A3linux%E8%BD%AF%E4%B8%AD%E6%96%AD/" title="09|基础篇--怎么理解Linux软中断？">09|基础篇--怎么理解Linux软中断？</a>
      </h3>
      <div class="post_content summary">
        软中断（softirq） 软中断（softirq）CPU 使用率升高也是最常见的一种性能问题
中断其实是一种异步的事件处理机制，可以提高系统的并发处理能力。
为了减少对正常进程运行调度的影响，中断处理程序就需要尽可能快地运行。
Linux 将中断处理过程分成了两个阶段，也就是上半部和下半部：
 上半部用来快速处理中断，它在中断禁止模式下运行，主要处理跟硬件紧密相关的或时间敏感的工作。 下半部用来延迟处理上半部未完成的工作，通常以内核线程的方式运行。  网卡接收到数据包后，会通过硬件中断的方式，通知内核有新的数据到了。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-05-31T17:31:56&#43;0800" class="date">Sun, May 31, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/08%E6%A1%88%E4%BE%8B%E7%AF%87%E7%B3%BB%E7%BB%9F%E4%B8%AD%E5%87%BA%E7%8E%B0%E5%A4%A7%E9%87%8F%E4%B8%8D%E5%8F%AF%E4%B8%AD%E6%96%AD%E8%BF%9B%E7%A8%8B%E5%92%8C%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B%E6%80%8E%E4%B9%88%E5%8A%9E%E4%B8%8B/" title="08|案例篇--系统中出现大量不可中断进程和僵尸进程怎么办？（下）">08|案例篇--系统中出现大量不可中断进程和僵尸进程怎么办？（下）</a>
      </h3>
      <div class="post_content summary">
        问题 通过分析 top 命令的输出，我们发现了两个问题：
 第一，iowait 太高了，导致系统平均负载升高，并且已经达到了系统 CPU 的个数。 第二，僵尸进程在不断增多，看起来是应用程序没有正确清理子进程的资源。  iowait分析  dstat可以同时查看 CPU 和 I/O 这两种资源的使用情况   strace 正是最常用的跟踪进程系统调用的工具。  $ perf record -g $ perf report 僵尸进程 找出父进程，然后在父进程里解决。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-05-31T17:16:28&#43;0800" class="date">Sun, May 31, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/07%E6%A1%88%E4%BE%8B%E7%AF%87%E7%B3%BB%E7%BB%9F%E4%B8%AD%E5%87%BA%E7%8E%B0%E5%A4%A7%E9%87%8F%E4%B8%8D%E5%8F%AF%E4%B8%AD%E6%96%AD%E8%BF%9B%E7%A8%8B%E5%92%8C%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B%E6%80%8E%E4%B9%88%E5%8A%9E%E4%B8%8A/" title="07|案例篇--系统中出现大量不可中断进程和僵尸进程怎么办？（上）">07|案例篇--系统中出现大量不可中断进程和僵尸进程怎么办？（上）</a>
      </h3>
      <div class="post_content summary">
        进程状态  top 和 ps 是最常用的查看进程状态的工具 top命令：   R 是 Running 或 Runnable 的缩写，表示进程在 CPU 的就绪队列中，正在运行或者正在等待运行。 D 是 Disk Sleep 的缩写，也就是不可中断状态睡眠（Uninterruptible Sleep），一般表示进程正在跟硬件交互，并且交互过程不允许被其他进程或中断打断。 Z 是 Zombie 的缩写，如果你玩过“植物大战僵尸”这款游戏，应该知道它的意思。它表示僵尸进程，也就是进程实际上已经结束了，但是父进程还没有回收它的资源（比如进程的描述符、PID 等）。 S 是 Interruptible Sleep 的缩写，也就是可中断状态睡眠，表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时，它会被唤醒并进入 R 状态。 I 是 Idle 的缩写，也就是空闲状态，用在不可中断睡眠的内核线程上。前面说了，硬件交互导致的不可中断进程用 D 表示，但对某些内核线程来说，它们有可能实际上并没有任何负载，用 Idle 正是为了区分这种情况。要注意，D 状态的进程会导致平均负载升高， I 状态的进程却不会。  进程组与会话  进程组：表示一组相互关联的进程，比如每个子进程都是父进程所在组的成员； 会话：指共享同一个控制终端的一个或多个进程组。  
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-05-31T17:16:28&#43;0800" class="date">Sun, May 31, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/33%E5%85%B3%E4%BA%8E-linux-%E7%BD%91%E7%BB%9C%E4%BD%A0%E5%BF%85%E9%A1%BB%E7%9F%A5%E9%81%93%E8%BF%99%E4%BA%9B%E4%B8%8A/" title="33|关于 Linux 网络，你必须知道这些（上）">33|关于 Linux 网络，你必须知道这些（上）</a>
      </h3>
      <div class="post_content summary">
        网络模型 开放式系统互联通信参考模型（Open System Interconnection Reference Model），简称为 OSI 网络模型。
OSI 模型把网络互联的框架分为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层等七层，每个层负责不同的功能。其中，
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-05-31T17:16:28&#43;0800" class="date">Sun, May 31, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/34%E5%85%B3%E4%BA%8E-linux-%E7%BD%91%E7%BB%9C%E4%BD%A0%E5%BF%85%E9%A1%BB%E7%9F%A5%E9%81%93%E8%BF%99%E4%BA%9B%E4%B8%8B/" title="34|关于 Linux 网络，你必须知道这些（下）">34|关于 Linux 网络，你必须知道这些（下）</a>
      </h3>
      <div class="post_content summary">
        性能指标 通常用带宽、吞吐量、延时、PPS（Packet Per Second）等指标衡量网络的性能。
 带宽，表示链路的最大传输速率，单位通常为 b/s （比特 / 秒）。 吞吐量，表示单位时间内成功传输的数据量，单位通常为 b/s（比特 / 秒）或者 B/s（字节 / 秒）。吞吐量受带宽限制，而吞吐量 / 带宽，也就是该网络的使用率。 延时，表示从网络请求发出后，一直到收到远端响应，所需要的时间延迟。在不同场景中，这一指标可能会有不同含义。比如，它可以表示，建立连接需要的时间（比如 TCP 握手延时），或一个数据包往返所需的时间（比如 RTT）。 PPS，是 Packet Per Second（包 / 秒）的缩写，表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力，比如硬件交换机，通常可以达到线性转发（即 PPS 可以达到或者接近理论最大值）。而基于 Linux 服务器的转发，则容易受网络包大小的影响。  除了这些指标，网络的可用性（网络能否正常通信）、并发连接数（TCP 连接数量）、丢包率（丢包百分比）、重传率（重新传输的网络包比例）等也是常用的性能指标。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    


<div class="pagination">
  <ul class="pagination_container">
      
        
          <li class="page-item prev to-left">
            <a href="/page/7/" aria-label="Previous" class="page-link">
              <span aria-hidden="true">❮ Prev</span>
            </a>
          </li>
        
        
          <li class="page-item next to-right">
            <a href="/page/9/" aria-label="Next" class="page-link">
              <span aria-hidden="true">Next ❯</span>
            </a>
          </li>
        
      
  </ul>
</div>


  </div>
</section>

        <a id="back_to_top" title="Go To Top" href="#">
  <span>
    <svg viewBox="0 0 24 24">
      <path fill="none" d="M0 0h24v24H0z"></path>
      <path d="M12 2L4.5 20.29l.71.71L12 18l6.79 3 .71-.71z"></path>
    </svg>
  </span>
</a>

        <footer id="footer">
  <p>
    <span>&copy; 2021 <a href="https://zsy619.github.io" title="迪克猪的博客">迪克猪的博客</a> </span>
    <span>Built with <a rel="nofollow" target="_blank" href="https://gohugo.io">Hugo</a></span>
    <span>Theme by <a rel="nofollow" target="_blank" href="https://github.com/wayjam/hugo-theme-mixedpaper">WayJam</a></span>
  </p>

  <script src="https://zsy619.github.io/js/main.min.8b182175f5874aeed0acc0979345c98d4bde22208ec4f36cc1d6e3102acb4b10.js" integrity="sha256-ixghdfWHSu7QrMCXk0XJjUveIiCOxPNswdbjECrLSxA=" crossorigin="anonymous" async></script>
</footer>

    </body>
</html>
